//
//  HMTabBar.swift
//  WeiBo14
//
//  Created by HM on 16/3/2.
//  Copyright © 2016年 HM. All rights reserved.
//

import UIKit

class HMTabBar: UITabBar {
    
    // 撰写按钮点击的闭包回调
    var composeButtonClickClosure: (()->())?
    
    // 如果我们重写initWithFrame,意味着当前控件是通知代码创建的,里面有添加子控件等特殊逻辑,如果我们并没有去重写initWithCoder方法的话,但是别人在使用我们控件的话,是执行不到添加子控件等特殊逻辑,解决方式有两种:
    // - 把 initWithFrame 里面的逻辑也在 initWithCoder里面写一份
    // - 直接在里面抛错
    // 从 代码加载视图会调用这个方法 ,通过 Xib 初始化控件是不会调用此方法的
    override init(frame: CGRect) {
        super.init(frame: frame)
        setupUI()
    }

    // 从 xib/sb 里面加载视图会调用这个方法, 通过 代码 是不会调用此方法
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    // 设置视图
    private func setupUI(){
        backgroundImage = UIImage(named: "tabbar_background")
        // 添加子控件
        addSubview(composeButton)
    }
    
    override func layoutSubviews() {
        super.layoutSubviews()
        
        // 每一个tabBar 的宽度
        let itemW = self.frame.width / 5
        
        var index = 0
        
        // 调整其他按钮的位置和宽度
        for value in self.subviews {
            // 如果是 uibarButton
            // 1. 取到对应按钮
            if value.isKindOfClass(NSClassFromString("UITabBarButton")!) {
                // 2. 计算出对应按钮位置大小
                // 计算 x 和 width
                let x = CGFloat(index) * itemW
                // 3. 设置
                value.frame.size.width = itemW
                value.frame.origin.x = x
                
                // 递增
                index++
                
                // 如果发现下一次遍历的是第3个按钮,那么就往后一个位置,index++
                if index == 2 {
                    index++
                }
            }
        }
        
        // 调整加号的位置
        composeButton.center = CGPoint(x: self.center.x, y: self.frame.height * 0.5)
    }
    
    /// 撰写按钮点击事件
    @objc private func composeButtonClick(){
        // 因为当前是一个视图View,是不具有弹出控制器的功能,所以我们需要将事件抛出给控制器
        // 去执行回调的闭包
        composeButtonClickClosure?()
    }
    
    // MARK: - 懒加载控件
    
    
    private lazy var composeButton: UIButton = {
        let button = UIButton()
        
        // 需要给按钮添加一个点击事件
        button.addTarget(self, action: "composeButtonClick", forControlEvents: .TouchUpInside)
        
        // 设置不同状态下的背景图片
        button.setBackgroundImage(UIImage(named: "tabbar_compose_button_highlighted"), forState: UIControlState.Highlighted)
        button.setBackgroundImage(UIImage(named: "tabbar_compose_button"), forState: UIControlState.Normal)
        
        // 设置不同状态下的图片
        button.setImage(UIImage(named: "tabbar_compose_icon_add_highlighted"), forState: .Highlighted)
        button.setImage(UIImage(named: "tabbar_compose_icon_add"), forState: .Normal)
        
        // 设置按钮大小
        button.sizeToFit()
    
        return button
    }()
    

}
